Data Analytics
Project Template
June 10, 2023
今日話すこと
今日話さないこと
一般的な分析ワークフロー
現実は厳しい
"つらいこと"がたくさん"技術的に解決出来る部分"は少しずつでも解消 テンプレートとして共有環境の構築
結果の共有
当然Pythonも使いたい
エディタはxxx派
作ってみた
GitHub https://github.com/y-sako?tab=repositories
コンセプト
環境構築はなるべくシンプルに(知識が無くても汎用的に)
結果共有はhtmlレポートやwebアプリでクイックに(組織内には)
言語やエディタは好きなもので!(みんな仲良く)
使い方は簡単
テンプレリポジトリをワークスペースに(オンプレ / クラウド)
環境構築はdocker-compose upするだけ(+ .envファイルで設定)
分析作業はQuartoメインで(RもPythonも書けるよ、使ってみない?)
結果共有はShiny & Streamlit(shareディレクトリにファイルを置くだけ)
ディレクトリ構成
一般的な分析プロジェクトを想定
(あくまで参考に)
project
│
├── .github/ <- Gitの設定用
│
├── .vscode/ <- VSCodeの設定用
│
├── .docker/ <- 環境構築用ファイル
│
├── data/ <- データ用
│
├── eda/ <- 探索的分析用
│
├── model/ <- モデリング用(モデルオブジェクトなど)
│
├── output/ <- アウトプット用
│
├── script/ <- ソースコード用
│
├── share/ <- 結果共有用(htmlレポートやappを配置)
│
├── .dockerignore
│
├── .gitignore
│
├── project.Rproj
│
├── project.qmd <- メインファイル
│
└── README.md <- プロジェクトの説明用
Dockerfile
rockerベースに日本語設定、必要な言語 / ライブラリ / フレームワークを入れていく
(使わないものは省略 / renvやpoetryでカチッとやる場合も)
# ベースイメージ
FROM rocker/verse:4.3.0
# OS環境設定
## ロケール
ENV LANG ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
RUN sed -i '$d' /etc/locale.gen \
&& echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen \
&& locale-gen ja_JP.UTF-8 \
&& /usr/sbin/update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
RUN /bin/bash -c "source /etc/default/locale"
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
## フォント
RUN apt-get update && apt-get install -y \
fonts-ipaexfont \
fonts-noto-cjk \
fonts-firacode
# パッケージのインストール
## 汎用
RUN install2.r --error --deps TRUE --ncpus -1 \
languageserver \
pacman \
rmdformats \
systemfonts \
janitor \
data.table \
progress \
RVerbalExpressions \
png \
reticulate \
markdown \
svglite \
DT \
gt \
gtExtras \
plotly \
zipangu
## モデリング用
RUN install2.r --error --ncpus -1\
performance \
parameters \
see \
rstan \
tidybayes \
brms \
Robyn
# Quartoのインストール
RUN sudo rm -rf /opt/quarto
ENV QUARTO_VERSION 1.3.361
RUN /rocker_scripts/install_quarto.sh
RUN quarto install extension quarto-ext/fontawesome --no-prompt
# Shinyのインストール
# ENV SHINY_SERVER_VERSION 1.5.20.1002
RUN /rocker_scripts/install_shiny_server.sh
RUN install2.r --error --ncpus -1\
flexdashboard \
bs4Dash \
bslib \
thematic \
shinyWidgets
# Pythonのインストール
RUN apt-get update && apt-get install -y python3 python3-pip
# ライブラリのインストール
## 汎用
RUN pip install -U pip \
&& pip install --no-cache-dir jupyter \
&& pip install --no-cache-dir jupyterlab \
&& pip install --no-cache-dir pandas \
&& pip install --no-cache-dir numpy \
&& pip install --no-cache-dir streamlit \
&& pip install --no-cache-dir shiny \
&& pip install --no-cache-dir lightweight_mmmdocker-compose.yml
RStudio & Shiny & Jupyterlab & Streamlit Serverをサービスとして用意
(プロジェクトで異なる部分は変数 & 共通する部分はファイルや設定をマウント)
version: '3'
services:
quarto:
restart: always
build:
context: .
dockerfile: Dockerfile
image: "${COMPOSE_PROJECT_NAME}"
container_name: "${COMPOSE_PROJECT_NAME}"
ports:
- "${PORT_NUM_RSTUDIO}:8787"
- "${PORT_NUM_SHINY}:3838"
environment:
- ROOT=TRUE
- "PASSWORD=${PASSWORD}"
- DISABLE_AUTH=false
- ADD=shiny
volumes:
- ../:/home/rstudio/project
- ../.rstudio/rstudio-prefs.json:/home/rstudio/.config/rstudio/rstudio-prefs.json
- ../:/home/vscode/project
- ../share/shiny:/srv/shiny-server
- "${PATH_DATA}:/home/rstudio/project/data"
- "${PATH_DATA}:/home/vscode/project/data"
tty: true
stdin_open: true
jupyterlab:
restart: always
build:
context: .
dockerfile: Dockerfile
image: "${COMPOSE_PROJECT_NAME}_jupyterlab"
container_name: "${COMPOSE_PROJECT_NAME}_jupyterlab"
working_dir: /home/jupyterlab/project
tty: true
volumes:
- ../:/home/jupyterlab/project
- "${PATH_DATA}:/home/jupyterlab/project/data"
ports:
- "${PORT_NUM_JUPYTERLAB}:8080"
environment:
- "JUPYTER_PASS=${PASSWORD}"
command: "jupyter-lab --ip 0.0.0.0 --port=8080 --allow-root --no-browser --NotebookApp.token=''"
streamlit:
restart: always
build:
context: .
dockerfile: Dockerfile
image: "${COMPOSE_PROJECT_NAME}_streamlit"
container_name: "${COMPOSE_PROJECT_NAME}_streamlit"
working_dir: /home/streamlit/project
tty: true
volumes:
- ../:/home/streamlit/project
- "${PATH_DATA}:/home/streamlit/project/data"
ports:
- "${PORT_NUM_STREAMLIT}:8501"
command: streamlit run ./share/streamlit/app.py.env
docker-compose.yml内に渡す環境変数を定義、各自で作成
(git管理外にして環境構築用ファイルを使いまわせるように)
自分の場合
RはRStudioで(ブラウザから)
PythonはVSCodeで(コンテナにリモート接続)
Quartoメイン(engine切り替え)
RStudio
Jupyterlab
展開も楽に
Shiny & Streamlitを活用
shareディレクトリ配下にファイルを置くだけで更新
Shiny-server
(他にもpyshiny, flexdashboard, bs4Dashなどのサンプルも)
Streamlit-server
まだまだ試行錯誤中
チームメンバーからのFBで少しずつ改善
もっと良い方法あるよ!など大歓迎
個人のAWS環境で公開
そのうち停止するのでスライドなどの資料はどこかに移行
(テンプレはセキュアな環境での使用を推奨)
余談:Quartoでスライド作るのはほぼ初めて
(以下を参考にさせて頂きました)
https://github.com/kazuyanagimoto/quarto-slides-example/tree/main